CONSTANTS_SRC = [
  'src/main/java/com/google/gerrit/server/documentation/Constants.java',
]

SRCS = glob(
  ['src/main/java/**/*.java'],
  excludes = CONSTANTS_SRC,
)
RESOURCES =  glob(['src/main/resources/**/*'])

java_library(
  name = 'constants',
  srcs = CONSTANTS_SRC,
  visibility = ['PUBLIC'],
)

# TODO(sop) break up gerrit-server java_library(), its too big
java_library(
  name = 'server',
  srcs = SRCS,
  resources = RESOURCES,
  deps = [
    ':constants',
    '//gerrit-antlr:query_exception',
    '//gerrit-antlr:query_parser',
    '//gerrit-common:annotations',
    '//gerrit-common:server',
    '//gerrit-extension-api:api',
    '//gerrit-patch-commonsnet:commons-net',
    '//gerrit-patch-jgit:server',
    '//gerrit-prettify:server',
    '//gerrit-reviewdb:server',
    '//gerrit-util-cli:cli',
    '//gerrit-util-ssl:ssl',
    '//lib:args4j',
    '//lib:automaton',
    '//lib:grappa',
    '//lib:gson',
    '//lib:guava',
    '//lib:guava-retrying',
    '//lib:gwtjsonrpc',
    '//lib:gwtorm',
    '//lib:jsch',
    '//lib:juniversalchardet',
    '//lib:mime-util',
    '//lib:pegdown',
    '//lib:protobuf',
    '//lib:tukaani-xz',
    '//lib:velocity',
    '//lib/antlr:java_runtime',
    '//lib/auto:auto-value',
    '//lib/commons:codec',
    '//lib/commons:compress',
    '//lib/commons:dbcp',
    '//lib/commons:lang',
    '//lib/commons:net',
    '//lib/commons:validator',
    '//lib/dropwizard:dropwizard-core',
    '//lib/guice:guice',
    '//lib/guice:guice-assistedinject',
    '//lib/guice:guice-servlet',
    '//lib/jgit/org.eclipse.jgit:jgit',
    '//lib/jgit/org.eclipse.jgit.archive:jgit-archive',
    '//lib/joda:joda-time',
    '//lib/log:api',
    '//lib/log:jsonevent-layout',
    '//lib/log:log4j',
    '//lib/lucene:lucene-analyzers-common',
    '//lib/lucene:lucene-core-and-backward-codecs',
    '//lib/lucene:lucene-queryparser',
    '//lib/ow2:ow2-asm',
    '//lib/ow2:ow2-asm-tree',
    '//lib/ow2:ow2-asm-util',
    '//lib/prolog:runtime',
  ],
  provided_deps = [
    '//lib:servlet-api-3_1',
  ],
  visibility = ['PUBLIC'],
)

java_sources(
  name = 'server-src',
  srcs = SRCS + RESOURCES,
  visibility = ['PUBLIC'],
)

TESTUTIL_DEPS = [
  ':server',
  '//gerrit-common:server',
  '//gerrit-cache-h2:cache-h2',
  '//gerrit-extension-api:api',
  '//gerrit-gpg:gpg',
  '//gerrit-lucene:lucene',
  '//gerrit-reviewdb:server',
  '//lib:gwtorm',
  '//lib:h2',
  '//lib:truth',
  '//lib/guice:guice',
  '//lib/guice:guice-servlet',
  '//lib/jgit/org.eclipse.jgit:jgit',
  '//lib/jgit/org.eclipse.jgit.junit:junit',
  '//lib/joda:joda-time',
  '//lib/log:api',
  '//lib/log:impl_log4j',
  '//lib/log:log4j',
]

TESTUTIL = glob([
  'src/test/java/com/google/gerrit/testutil/**/*.java',
  'src/test/java/com/google/gerrit/server/project/Util.java',
  ])
java_library(
  name = 'testutil',
  srcs = TESTUTIL,
  deps = [
    '//lib/auto:auto-value',
  ],
  provided_deps = TESTUTIL_DEPS,
  exported_deps = [
    '//lib/easymock:easymock',
    '//lib/powermock:powermock-api-easymock',
    '//lib/powermock:powermock-api-support',
    '//lib/powermock:powermock-core',
    '//lib/powermock:powermock-module-junit4',
    '//lib/powermock:powermock-module-junit4-common',
  ],
  visibility = ['PUBLIC'],
)

PROLOG_TEST_CASE = [
  'src/test/java/com/google/gerrit/rules/PrologTestCase.java',
]
PROLOG_TESTS = glob(
  ['src/test/java/com/google/gerrit/rules/**/*.java'],
  excludes = PROLOG_TEST_CASE,
)

java_library(
  name = 'prolog_test_case',
  srcs = PROLOG_TEST_CASE,
  deps = [
    ':server',
    ':testutil',
    '//gerrit-common:server',
    '//gerrit-extension-api:api',
    '//lib:guava',
    '//lib:junit',
    '//lib:truth',
    '//lib/guice:guice',
    '//lib/prolog:runtime',
  ],
)

java_test(
  name = 'prolog_tests',
  srcs = PROLOG_TESTS,
  resources = glob(['src/test/resources/com/google/gerrit/rules/**/*']),
  deps = TESTUTIL_DEPS + [
    ':prolog_test_case',
    ':testutil',
    '//gerrit-server/src/main/prolog:common',
    '//lib/prolog:runtime',
  ],
)

QUERY_TESTS = glob(
  ['src/test/java/com/google/gerrit/server/query/**/*.java'],
)

java_test(
  name = 'query_tests',
  srcs = QUERY_TESTS,
  deps = TESTUTIL_DEPS + [
    ':testutil',
    '//gerrit-antlr:query_exception',
    '//gerrit-antlr:query_parser',
    '//gerrit-common:annotations',
    '//gerrit-server/src/main/prolog:common',
    '//lib/antlr:java_runtime',
  ],
  source_under_test = [':server'],
)

java_test(
  name = 'server_tests',
  labels = ['server'],
  srcs = glob(
    ['src/test/java/**/*.java'],
    excludes = TESTUTIL + PROLOG_TESTS + PROLOG_TEST_CASE + QUERY_TESTS
  ),
  deps = TESTUTIL_DEPS + [
    ':testutil',
    '//gerrit-antlr:query_exception',
    '//gerrit-common:annotations',
    '//gerrit-patch-jgit:server',
    '//gerrit-server/src/main/prolog:common',
    '//lib:args4j',
    '//lib:grappa',
    '//lib:gson',
    '//lib:guava',
    '//lib:guava-retrying',
    '//lib:protobuf',
    '//lib/dropwizard:dropwizard-core',
    '//lib/guice:guice-assistedinject',
    '//lib/prolog:runtime',
  ],
  source_under_test = [':server'],
  visibility = ['//tools/eclipse:classpath'],
)
